var title = document.title;

var divInfo = $('#divInfo')[0];

var divLogin = $('#divLogin')[0];
var imgLogin = $('#imgLogin')[0];

var divReserve = $('#divReserve')[0];
var imgReserve = $('#imgReserve')[0];

var message = [];

/**
 * 显示消息。
 */
function display(content) {
	var dateObj = new Date();
	var timeStr = '[' + (dateObj.getMinutes() < 10 ? '0' : '') + dateObj.getMinutes() + ':' + (dateObj.getSeconds() < 10 ? '0' : '') + dateObj.getSeconds() + ']';

	var result = new RegExp('^\\[([^\\]]+)\\](.*)$', 'ig').exec(content);
	if(result) {
		message[message.length] = '<p style="color: #' + result[1] + '">' + timeStr + '&nbsp;&nbsp;' + result[2] + '</p>';
	} else {
		message[message.length] = '<p>' + timeStr + '&nbsp;&nbsp;' + content + '</p>';
	}

	if(message.length > 20) {
		message.shift();
	}

	divInfo.innerHTML = message.join('');
}

function init() {
	display("初始化远程会话...");

	var x = {
		"sid" : sid,
		"from" : from,
		"to" : to,
		"dater" : dater
	}
	$.get("/init", x, function(data, status) {
		try {
			eval('var data = ' + data);
		} catch(e) {
		}

		if( typeof (data) == 'string' || typeof (data) == 'number') {// 弹出调试信息
			alert(data);
		} else {
			if(data.result == 200) {// 成功登录。
				display('[00B21D]成功初始化！');
				display('请输入扰码并登录。');

				divLogin.style.display = 'block';

				$('#inLogin')[0].focus();

				imgLogin.src = '/code?type=login&sid=' + sid + '&' + new Date().getTime();
			} else {
				display('[F00]' + data.message);

				setTimeout('init()', 500);
			}
		}
	});
}

init();

/**
 * 输入验证码，登录。
 */
function login() {
	display("正在登录...");

	var x = {
		"sid" : sid,
		"user" : user,
		"code" : $('#inLogin')[0].value
	}
	$.get("/login", x, function(data, status) {
		try {
			eval('var data = ' + data);
		} catch(e) {
		}

		if( typeof (data) == 'string' || typeof (data) == 'number') {// 弹出调试信息
			alert(data);
		} else {
			if(data.result == 200) {// 成功登录。
				display('[00B21D]' + data.message);

				divLogin.style.display = 'none';

				detect('暂停');

				$('#inReserve')[0].focus();

				imgReserve.src = '/code?type=reserve&sid=' + sid + '&' + new Date().getTime();
			} else if(data.result == 400) {// 验证码错误。
				display('[F00]扰码错误，请重新输入');

				$('#inLogin')[0].focus();
				$('#inLogin')[0].value = '';

				imgLogin.src = '/code?type=login&sid=' + sid + '&' + new Date().getTime();
			} else if(data.result == 500) {// 会话失效。
				display('[F00]' + data.message);

				setTimeout('login()', 500);
			} else if(data.result == 502) {// 重试。
				display('[F00]' + data.message);

				setTimeout('login()', 500);
			} else {
				display('[F00]' + data.message);
			}
		}
	});
}

// =======================================================================
var filterNos = '';
var reserveCode = '';
var onReserveTimer = null;

/**
 * 忽略的车次及席位。
 */
function filter() {
	filterNos = $('#inFilterNos')[0].value;
	display('[00B21D]已设置忽略列表');
}

/**
 * 设置预订验证码。
 */
function setReserveCode() {
	reserveCode = $('#inReserve')[0].value;

	if($('#inReserve')[0].value) {
		return display('[00B21D]已设置预订扰码');
	} else {
		display('[00B21D]已取消自动预订');
	}
}

/**
 * 探测可预订列车信息，并初始化预订表单。
 */
function detect(active) {
	if( typeof (active) != 'undefined' && active) {
		$('#inState')[0].value = active;
	}

	if($('#inState')[0].value == '预订') {
		return;
	}

	display("获取余票...");

	document.title = title;

	divReserve.style.display = 'block';

	if(onReserveTimer) {
		clearTimeout(onReserveTimer);
		onReserveTimer = null;
	}

	var x = {
		"sid" : sid,
		"filter" : filterNos
	}
	$.get("/detect", x, function(data, status) {
		try {
			eval('var data = ' + data);
		} catch(e) {
		}

		if( typeof (data) == 'string' || typeof (data) == 'number') {// 弹出调试信息。
			alert(data);
		} else {
			if(data.result == 200) {// 有可预订车次，等待填写预订验证码。
				document.title = '...';

				detect('预订');

				display('[00B21D]' + data.message);

				return reserve();
			} else if(data.result == 201) {
				detect('预订');

				return display('[F00]' + data.message);
			} else if(data.result == 300) {// 无有效车次。
				return setTimeout('detect()', 2000);
			} else if(data.result == 401) {// 登录失效，必须重新开启新的远程会话。
				return display('[F00]远程会话失效，请重新登录');
			} else {
				display('[F00]' + data.message);
			}
		}

		setTimeout('detect()', 1000);
	});
}

/**
 * 输入验证码，预订。
 */
function reserve() {
	if(!reserveCode) {
		onReserveTimer = setTimeout('reserve()', 200);
		return;
	}
	reserveCode = '';

	display("正在提交...");

	divReserve.style.display = 'none';

	var x = {
		"sid" : sid,
		"code" : $('#inReserve')[0].value
	}
	$.get("/reserve", x, function(data, status) {
		try {
			eval('var data = ' + data);
		} catch(e) {
		}

		if( typeof (data) == 'string' || typeof (data) == 'number') {// 弹出调试信息
			alert(data);
		} else {
			if(data.result == 200) {// 成功进入排除。
				display('[00B21D]' + '成功进入预订排队，请稍等...');

				$('#inReserve')[0].focus();
				$('#inReserve')[0].value = '';

				imgReserve.src = '/code?type=reserve&sid=' + sid + '&' + new Date().getTime();

				return order();
			} else if(data.result == 400) {
				display('[F00]请输入扰码');

				$('#inReserve')[0].focus();
				$('#inReserve')[0].value = '';

				imgReserve.src = '/code?type=reserve&sid=' + sid + '&' + new Date().getTime();
			} else if(data.result == 401) {// 登录失效，必须重新开启新的远程会话。
				return display('[F00]远程会话失效，请重新登录');
			} else if(data.result == 503) {
				display('[F00]余票不足，重新获取余票...');
				return detect('暂停');
			} else {
				display('[F00]' + data.message);

				if(data.message == '无法访问远程') {
					setReserveCode();

					return reserve();
				}
			}
		}

		divReserve.style.display = 'block';
	});
}

/**
 * 尝试获得最终的预订结果。
 */
function order() {
	divReserve.style.display = 'none';

	var x = {
		"sid" : sid
	}
	$.get("/order", x, function(data, status) {
		try {
			eval('var data = ' + data);
		} catch(e) {
		}

		if( typeof (data) == 'string' || typeof (data) == 'number') {// 弹出调试信息
			alert(data);
		} else {
			if(data.result == 200) {// 成功进入排除。
				return display('[00B21D]' + data.message);
			} else if(data.result == 300) {
				display(data.message);
			} else if(data.result == 401) {
				return display('[F00]远程会话超时，请访问 http://www.12306.cn/ 查询订单');
			} else if(data.result == 501) {
				display('[F00]失败：' + data.message);

				return detect('暂停');
			} else {
				display('[F00]' + data.message);
			}
		}

		setTimeout('order()', 2000);
	});
}

/**
 * 关闭窗口，清除远程会话数据。
 */
window.onbeforeunload = function() {
	$.get("/logout?sid=" + sid);
}